Google 提供の gcloud CLI Docker イメージを独自の Artifact Registry にプッシュする
Google Cloud データエンジニアのはんざわです。
先日、gcloud CLI が使える Docker イメージを利用したいが、Docker Hub Repository にプッシュされているイメージは利用できないという特殊なケースがありました。
本ブログでは、公式が Artifact Registry でホストしている Docker イメージを自分のプロジェクトの Artifact Registry にプッシュする方法を紹介します。
gcloud CLI のコンテナイメージ
Google Cloud CLI Docker イメージは、gcloud CLI が Debian または Alpine イメージ上にインストールされた Docker イメージです。このイメージは、Docker Hub Repository と Artifact Registry にホストされています。
Docker Hub Repository
Docker Hub Repository にホストされているイメージのリポジトリ名は、以下のとおりです。
google/cloud-sdk
今回のブログでは使用しませんが、以下のコマンドで Docker Hub Repository からイメージをプルできます。
$ docker pull google/cloud-sdk
Artifact Registry
Artifact Registry にもイメージがホストされており、リポジトリ名は以下のとおりです。
gcr.io/google.com/cloudsdktool/google-cloud-cli
デフォルトだと us.gcr.io
のリポジトリを参照しますが、他のリージョンのリポジトリから参照可能です。
eu.gcr.io
asia.gcr.io
gcr.io
の表記を見て、Container Registry は廃止されるのでは?と思った方もいると思います。
裏側では gcr.io
のトラフィックが Container Registry から Artifact Registry にリダイレクトするように設定されているため、Artifact Registry からイメージを取得することが可能となっています。
タグ
gcloud CLI の Docker イメージのタグは、全部で6種類あります。
:stable
:VERSION-stable
:alpine
:VERSION-alpine
:emulators
:VERSION-emulators
:latest
:VERSION
:slim
:VERSION-slim
:debian_component_based
:VERSION-debian_component_based
以下のリンクで、それぞれのタグの特徴がまとめられています。ユースケースに合ったタグを選択する参考にしてください。
また、各タグにインストールされているライブラリの一覧は、以下のリンクから確認できます。
参照:Components installed in each tag
さらに、以下のコマンドのように、:502.0.0-stable
のようなバージョンのタグを指定することで、特定の gcloud CLI のバージョンをインストール可能です。
$ docker pull gcr.io/google.com/cloudsdktool/google-cloud-cli:502.0.0-stable
本番環境で利用する場合、gcloud CLI のバージョン更新により、ツールの動作変更やパッケージの内容変更などが発生する可能性があります。このような変更の影響を避けるためにも、特定のバージョンのタグを指定したり、特定のイメージのハッシュ値を指定することを推奨します。
参考:Use a specific version in production
タグとバージョンの一覧は、以下のコンソールから確認できます。
試してみる
ここからは、実際に公式の Artifact Registry にホストされているイメージをプルし、自作した Artifact Registry にプッシュしてみたいと思います。
環境
- Cloud Shell
Google Cloud SDK: 501.0.0
Docker version: 27.3.1
Artifact Registry のリポジトリ作成
まずは、プルしたイメージをプッシュする Artifact Registry のリポジトリを以下のコマンドで作成します。
$ gcloud artifacts repositories create sample-sdk \
--repository-format docker \
--location asia-northeast1
gcloud CLI のイメージをプルする
次に、以下のコマンドで、Artifact Registry にホストされているイメージをプルします。
$ docker pull gcr.io/google.com/cloudsdktool/google-cloud-cli:502.0.0-stable
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
gcr.io/google.com/cloudsdktool/google-cloud-cli 502.0.0-stable 1f9b8e65da43 2 days ago 566MB
さらに、以下のコマンドで、プルしたイメージの gcloud CLI
のバージョンを確認してみます。
$ docker run -it gcr.io/google.com/cloudsdktool/google-cloud-cli:502.0.0-stable gcloud -v
Google Cloud SDK 502.0.0
alpha 2024.11.15
beta 2024.11.15
bq 2.1.9
bundled-python3-unix 3.11.9
core 2024.11.15
gcloud-crc32c 1.0.0
gsutil 5.31
指定したバージョンのとおり、502.0.0
のバージョンのパッケージがインストールされていました。
Artifact Registry にプッシュする
最後に事前に作成した Artifact Registry のリポジトリにプルしたイメージをプッシュします。
まずは、プルしたイメージに latest
のタグを付与します。
docker tag 1f9b8e65da43 asia-northeast1-docker.pkg.dev/<PROJECT_ID>/sample-sdk/google-cloud-cli:latest
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
asia-northeast1-docker.pkg.dev/<PROJECT_ID>/sample-sdk/google-cloud-cli latest 1f9b8e65da43 2 days ago 566MB
gcr.io/google.com/cloudsdktool/google-cloud-cli 502.0.0-stable 1f9b8e65da43 2 days ago 566MB
タグを付与したイメージをプッシュします。
docker push asia-northeast1-docker.pkg.dev/<PROJECT_ID>/sample-sdk/google-cloud-cli:latest
コンソールから Artifact Registry を確認し、イメージが正常にプッシュされていることが確認できました。
まとめ
今回のブログで、公式の Artifact Registry にホストされている Google Cloud CLI Docker イメージ を自分の環境の Artifact Registry にプッシュする方法を紹介しました。
このイメージを Cloud Run などのサービスに利用することもできるので、ぜひ試してみてください。